package LearnAlgorithm.f_字符串;
/*
利用字符重复出现的次数，编写一个方法，实现基本的字符串压缩功能。
比如:
字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”
若压缩后的字符串没有变短，则返回原先的字符串

给定一个String iniString为待压缩的串(长度小于等于10000),
保证串内字符均由大小写英文字母组成,返回一个String,为所求的压缩后或未变化的串
测试样例:
"aabcccccaaa”
返回: 
"a2b1c5a3"
 */
public class e压缩单个字符串 {
	public static void main(String[] args) {
		String s1 = "aabcccccaaa";
		System.out.println(zipString(s1));
	}
	
	public static String zipString(String string) {
		int count = 0;//记录重复次数；初始化=0
		char last = 0;//记录上一个字符
		char currentChar = 0;//记录当前字符
		StringBuilder stringBuilder = new StringBuilder();
		for (int i = 0; i < string.length(); i++) {
			currentChar = string.charAt(i);//更新当前字符
			if (stringBuilder.length() == 0) {//刚开始追加
				stringBuilder.append(currentChar);//当前字符追加进去
				count++;//更新次数
			} else {//已经追加了一些字符
				if (last == currentChar) {//上个字符=当前字符
					count++;//更新次数
				} else {//!=
					stringBuilder.append(count).append(currentChar);//追加次数；追加当前字符
					count = 1;//重置次数=1
				}
			}
			last = currentChar;//更新上个字符
		}
		if (count >= 1) {//最后一个字符，无论是否相等last，都不会被for循环添上count
			stringBuilder.append(count);//所以这里添上count;除非string就一个元素，否则这个判断必通过
		}
		if (stringBuilder.length() >= string.length()) {
			return string;
		} else {
			return stringBuilder.toString();
		}
	}
}
